ContextCapture 用户指南

细节层次原理

细节层次 (LOD) 格式允许加载和可视化非常大的三维模型。具体方法如下:
  • 离查看器越远,模型表示的复杂性越低。
  • 仅加载可从当前视点看到的模型部分。

LOD 使用树结构,其中最顶层的节点是一个非常粗糙的几何结构,子节点是逐渐精细的几何结构。叶节点是三维表示的最细粒度。

以下是 LOD 树的示例,其中每个节点均包含几何结构和纹理。与点云 LOD 表示不同,子节点包含完整的格网模型规范,可完全取代父格网模型。

例如,第 2 层节点分割成 2 个子节点,每个子节点包含模型的一半,但比例比父节点更精细。显示第 3 层节点时,应当隐藏第 2 层节点。

这些节点将根据与屏幕的接近程度显示。仍以我们的示例为例,当远离屏幕时,将显示节点 A(第 1 层)。离屏幕越来越近时,这些节点将被其子节点取代。例如,节点 B 将取代节点 A,节点 C 和 D 将取代节点 B。如果放大节点 C,可能会发现节点 C 将被第 4 层的节点 E 和 F 取代,而其同级节点 D 保持不变。

在节点替换为其子节点的过程中,可能会出现节点必须消失的现象,没有任何几何结构取代它。或者,格网模型简化可能会减少,形成一个父节点不含三角形的节点几何结构。这两种情况都需要空节点。LOD 表示中有时可能会出现空节点,我们应考虑到这一点。

在任何给定时间,仅显示可能的树路径中的一个节点。在 LOD 示例中,如果显示节点 B,则不会显示第 1 层节点,也不会显示节点 B 的任何后代。

现在的问题是,特定节点何时“近到正好”显示在屏幕上?对于这一点,ContextCapture(Viewer 或 Web Viewer)方法要考虑节点在屏幕上显示的大小(以像素为单位)。要提高计算速度,可将该节点的边界球体用作代理。边界球体在屏幕上的投影是一个直径为 d 的圆。直径 d 用于衡量该节点在屏幕上的显示大小。

每个节点都附加了最大屏幕直径(像素)。此值表示节点应可见的投影边界球体直径 d 的最大值。一旦超过此值,该节点应替换为其子节点。

在上述示例中,只要边界球体在屏幕上的投影是一个直径小于 40 像素的圆,就会显示节点 A。如果边界球体投影变得太大,则会加载和显示节点 B。

慢慢靠近模型时,将逐渐过渡到树结构中更高分辨率的节点,但仅限可见区域!这意味着当分辨率较高时,内存中仅加载树的一小部分。

在我们的示例中,当相机放大节点 D 时,节点 E 和 F 变为不可见。因此,尽管在高分辨率下需要模型的 D 部分,但节点 C、E 和 F 不再有用。为了最大程度地减少内存消耗,应将这些节点删除。

通常,如果某个节点在一段时间内处于不可见状态,则会将其删除。在变为不可见之后,这些节点不会立即删除,因为如果相机稍微移动一下,它们很有可能会再次可见。延迟删除可确保不太可能很快就需要这些节点。仅当仍然需要任何子节点时才不会删除节点。

ContextCapture(Viewer 或 Web Viewer)数据的 LOD 可视化的主要原理如下:

  • 在任何给定时间,根-叶路径中只有一个节点可见。
  • 当某个节点在屏幕上的投影位于预定义的范围内(以像素为单位)时,该节点可见。
  • 仅当需要时(即,父节点达到屏幕上的最大投影面积)加载节点。
  • 请注意,一段时间内不可见的节点将被删除。